#include <bits/stdc++.h>

using namespace std;

const int maxn=100005;

typedef long long valtype;

inline void read(valtype &r){
    char c;bool f=0;
    for(c=getchar();c>'9'||c<'0';c=getchar()) if(c=='-') f=1;
    for(r=0;c<='9'&&c>='0';c=getchar()) r=r*10+c-'0';
    if(f) r=-r;
}

inline int cmp(const valtype &v){if(v) return v>0?1:-1;return 0;}

struct Point{
    valtype x,y;
    Point(const valtype &_x=0,const valtype &_y=0):x(_x),y(_y){}
    const Point operator - (const Point &p) const{return Point(x-p.x,y-p.y);}
    const bool operator == (const Point &p) const{return cmp(x-p.x)==0&&cmp(y-p.y)==0;}
};

inline valtype dot(const Point &p,const Point &q){return p.x*q.x+p.y*q.y;}
inline valtype cross(const Point &p,const Point &q){return p.x*q.y-p.y*q.x;}
inline valtype dis2(const Point &p) {return p.x*p.x+p.y*p.y;}

Point watcher;
const double eps=1e-6;
inline int dcmp(const double &d){if(fabs(d)<eps) return 0;return d>0?1:-1;}
const bool operator < (const Point &p,const Point &q){
    int t=cmp(cross(p-watcher,q-watcher));
    /*printf("watcher: (%I64d,%I64d)\n",watcher.x,watcher.y);
    printf("cross(p-watcher,q-watcher)=%I64d\n",cross(p-watcher,q-watcher));
    printf("t=%d\n",t);*/
    if(t) return t>0;
    else return dis2(p-watcher)<dis2(q-watcher);
}

Point pts[maxn];
set<Point> conv;

inline bool inConv(const Point &p){
    set<Point>::iterator pre,suc;
    suc=conv.upper_bound(p);
    /*if(p.x==1){
        printf("watcher: (%I64d,%I64d)\n",watcher.x,watcher.y);
        puts("Points in conv:");
        for(set<Point>::iterator it=conv.begin();it!=conv.end();it++) printf("(%I64d,%I64d) ",it->x,it->y);putchar('\n');
        //printf("(%I64d,%I64d) (%I64d,%I64d) \n",pre->x,pre->y,suc->x,suc->y);
        printf("%d\n",(int)(Point(1,1)<Point(0,0)));
        conv.insert(p);
        for(set<Point>::iterator it=conv.begin();it!=conv.end();it++) printf("(%I64d,%I64d) ",it->x,it->y);putchar('\n');
    }*/
    if(suc==conv.begin()||suc==conv.end()) return false;
    pre=suc;pre--;
    if(cmp(cross(p-*pre,*suc-p))<=0) return true;
    return false;
}

int main(){
    int n;
    while(~scanf("%d",&n)){
        for(int i=1;i<=n;i++){
            read(pts[i].x);read(pts[i].y);
        }
        n=unique(pts+1,pts+1+n)-pts-1;
        //printf("%d\n",n);
        if(n<=3) puts("Possible");
        else{
            bool flag=1;
            conv.clear();
            watcher=pts[1];
            //printf("%d\n",(int)(Point(1,1)<Point(0,0)));
            //system("pause");
            for(int i=1;i<=3;i++) conv.insert(pts[i]);
            for(int i=4;i<=n&&flag;i++){
                //printf("checking %d\n",i);
                if(inConv(pts[i])) flag=0;
                else conv.insert(pts[i]);
            }
            conv.clear();
            watcher=pts[n];
            for(int i=n;i>n-3;i--) conv.insert(pts[i]);
            for(int i=n-3;flag&&i>0;i--){
                if(inConv(pts[i])) flag=0;
                else conv.insert(pts[i]);
            }
            if(flag) puts("Possible");
            else puts("Impossible");
        }
    }
    return 0;
}
